Givet /^att jag ?(inte|) har en fjärrströmbrytare "([^\"]*)"(| med huskod "([^\"]*)", enhetskod "([^\"]*)" och protokoll "([^\"]*)")$/ do |finns, fjärrströmbrytarnamn, noop, huskod, enhetskod, protokoll|
  switch = TriggerSwitchD::Switch.new(:house_code => huskod,:unit_code => enhetskod,:model_name => protokoll)
  @devices ||= {}
  if finns == "inte"
    @devices.delete(fjärrströmbrytarnamn)
  else
    @devices[fjärrströmbrytarnamn] = [switch]
  end
end

Givet /^att jag har en händelse "([^\"]*)"$/ do |händelse|
  fjärrströmbrytarnamn = händelse.scan(/^\w+ (\w+) klockan \w+/u).flatten[0]
  @schedule = TriggerSwitchD::Schedule.create
  @händelse = @schedule.schedule_action(TriggerSwitchD::Action.new(händelse,@devices))
  @händelse.should_not be_nil
end

Givet /^att "([^\"]*)" protokollet är definierat$/ do |protokoll|
  dongle(StringIO.new,protokoll)
end

Givet /^att jag har en händelse "([^\"]*)" på fil$/ do |händelse|
  prepare_schedule(händelse)
end

När /^jag utför följande:$/ do |table|
  @output = StringIO.new
  table.hashes.each do |row|
    a = @devices[row["fjärrströmbrytarnamn"]]
    a.should_not be_nil
    a.each do |switch|
      dongle(@output,switch.model_name).send(actions[row["kommando"]],switch.house_code, switch.unit_code)
    end
  end
end

När /^jag skickar "([^\"]*)" till "([^\"]*)" strömbrytare "([^\"]*)" "([^\"]*)"$/ do |kommando, protokoll, hus, enhet|
  @output = StringIO.new
  dongle(@output,protokoll).send(actions[kommando],hus,enhet)
end

Så /^skall jag se följande:$/ do |table|
  table.hashes.each do |row|
    @output.string.gsub("\n",",").should include(row["meddelande"])
  end
end

Så /^(skall det|det skall) finnas en fjärrströmbrytare "([^\"]*)" med huskod "([^\"]*)", enhetskod "([^\"]*)" och protokoll "([^\"]*)"$/ do |noop, fjärrströmbrytarnamn, huskod, enhetskod, protokoll|
  a = @devices[fjärrströmbrytarnamn]
  a.should_not be_nil
  a[0].house_code.should == huskod
  a[0].unit_code.should == enhetskod
  a[0].model_name.should == protokoll
end

Så /^skall det ?(inte|) finnas en händelse "([^\"]*)"$/ do |finns,händelse|
  h = @schedule.find(händelse)
  if finns == "inte"
    h.should be_nil
  else
    h.to_s.should include(händelse)
  end
end

Så /^(?:skall )händelsen "([^\"]*)" utföras klockan "([^\"]*)"$/ do |händelse, klockan|
  puts @schedule.inspect
  h = @schedule.find(händelse)
  h.should_not be_nil
  h.at.should == klockan
end

Så /^jag skall få ett "([^\"]*)" för "([^\"]*)"$/ do |felmeddelande,för|
  @exception.inspect.should include(felmeddelande)
  @exception.inspect.should include(för)
end

